package Zip7

import (
	"errors"
	"gitee.com/fierce_wolf/go-fox-edge-common/commUtil/IRW"
	"github.com/ulikunitz/xz"
	"io"
)

func Compress(data []byte) ([]byte, error) {
	if data == nil {
		return nil, errors.New("输入了空指针")
	}

	// 新建一个缓存
	bw := IRW.NewByteWriter()

	// 创建xz写入器，使用最高压缩级别(9)
	w, err := xz.NewWriter(bw)
	if err != nil {
		return nil, err
	}

	// 写入数据
	_, err = w.Write(data)
	if err != nil {
		return nil, err
	}

	// 关闭写入器以确保所有数据都写入
	err = w.Close()
	if err != nil {
		return nil, err
	}

	return bw.Bytes(), nil
}

func Decompress(data []byte) ([]byte, error) {
	if data == nil {
		return nil, errors.New("输入了空指针")
	}
	
	ir := IRW.NewByteReader(data)

	// 创建XZ读取器
	r, err := xz.NewReader(ir)
	if err != nil {
		return nil, err
	}

	iw := IRW.NewByteWriter()

	// 复制解压后的数据到输出文件
	_, err = io.Copy(iw, r)
	if err != nil {
		return nil, err
	}

	return iw.Bytes(), nil
}
